;
; Copyright 2010 - 2011, The PLDesktop Development Team
;
; This library is free software; you can redistribute it and/or
; modify it under the terms of the GNU Lesser General Public
; License as published by the Free Software Foundation; either
; version 2.1 of the License, or (at your option) any later version.
;
; This library is distributed in the hope that it will be useful,
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
; Lesser General Public License for more details.
;
; You should have received a copy of the GNU Lesser General Public
; License along with this library; if not, write to the Free Software
; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
;
;

MBOOT_PAGE_ALIGN   equ 1<<0
MBOOT_MEM_INFO     equ 1<<1
MBOOT_VIDEO_MODE   equ 1<<2
MBOOT_HEADER_MAGIC equ 0x1BADB002
MBOOT_HEADER_FLAGS equ MBOOT_PAGE_ALIGN | MBOOT_MEM_INFO | MBOOT_VIDEO_MODE
MBOOT_CHECKSUM     equ -(MBOOT_HEADER_MAGIC + MBOOT_HEADER_FLAGS)

[BITS 32]
[GLOBAL start]
[EXTERN _main]
[EXTERN init]
[EXTERN end]

[SECTION .init.multiboot]
align 4
mboot:
    dd MBOOT_HEADER_MAGIC
    dd MBOOT_HEADER_FLAGS
    dd MBOOT_CHECKSUM

[SECTION .init.text]
start:
    cli
    mov edi, ebx
    ; Set stack
    mov ebx, edi
    mov esp, stack
    push ebx
	 push eax
    ; clear the stackframe
    xor ebp, ebp
    mov eax, callmain
    jmp eax
callmain:
    call _main
    jmp $

[SECTION .asm.bss nobits]
stack:         resb 32678
